package co.edu.usbcali.sgi.presentation.backEndBeans;

import co.edu.usbcali.sgi.exceptions.*;
import co.edu.usbcali.sgi.modelo.*;
import co.edu.usbcali.sgi.modelo.dto.UnidadResidencialDTO;
import co.edu.usbcali.sgi.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.sgi.utilities.*;

import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.context.DisposableBean;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.TransientRenderingException;

import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import java.util.Vector;

import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;


public class UnidadResidencialView extends DataSource implements Renderable,
DisposableBean {
	private HtmlInputText txtUnrBarrio;
	private HtmlInputText txtUnrDireccion;
	private HtmlInputText txtUnrRazonSocial;
	private HtmlInputText txtUnrTelefono;
	private HtmlSelectOneMenu cmbPais;
	private HtmlSelectOneMenu cmbCiudad;
	private HtmlSelectOneMenu cmbEstCodigo_Estado;
	private HtmlSelectOneMenu cmbAdministrador;


	private HtmlInputText txtUnrNit;
	private HtmlCommandButton btnSave;
	private HtmlCommandButton btnModify;
	private HtmlCommandButton btnDelete;
	private HtmlCommandButton btnClear;
	private boolean renderDataTable;
	private boolean flag = true;
	private RenderManager renderManager;
	private PersistentFacesState state = PersistentFacesState.getInstance();
	private List<UnidadResidencial> unidadResidencial;
	private List<UnidadResidencialDTO> unidadResidencialDTO;
	private List<SelectItem> listEstado = new ArrayList<SelectItem>();
	private List<Ciudad> ciudad ;
	private List<Pais> pais;
	public List<SelectItem> listCiudad;
	private List<SelectItem> listPais = new ArrayList<SelectItem>();
	private List<SelectItem> listAdmin = new ArrayList<SelectItem>();

	public UnidadResidencialView() {
		super("");
	}

	public String action_clear() {
		txtUnrBarrio.setValue(null);
		txtUnrBarrio.setDisabled(true);
		txtUnrDireccion.setValue(null);
		txtUnrDireccion.setDisabled(true);
		txtUnrRazonSocial.setValue(null);
		txtUnrRazonSocial.setDisabled(true);
		txtUnrTelefono.setValue(null);
		txtUnrTelefono.setDisabled(true);
		cmbAdministrador.setValue(null);
		cmbAdministrador.setDisabled(true);
		cmbCiudad.setValue(null);
		cmbCiudad.setDisabled(true);
		cmbEstCodigo_Estado.setValue(null);
		cmbEstCodigo_Estado.setDisabled(true);
		cmbPais.setValue(null);
		cmbPais.setDisabled(true);
		txtUnrNit.setValue(null);
		txtUnrNit.setDisabled(false);
		btnSave.setDisabled(true);
		btnDelete.setDisabled(true);
		btnModify.setDisabled(true);
		btnClear.setDisabled(false);

		return "";
	}

	public void listener_txtId(ValueChangeEvent event) {
		if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
			UnidadResidencial entity = null;

			try {
				String unrNit = new String(txtUnrNit.getValue().toString());
				entity = BusinessDelegatorView.getUnidadResidencial(unrNit);
			} catch (Exception e) {
				// TODO: handle exception
			}

			if (entity == null) {
				txtUnrBarrio.setDisabled(false);
				txtUnrDireccion.setDisabled(false);
				txtUnrRazonSocial.setDisabled(false);
				txtUnrTelefono.setDisabled(false);
				cmbAdministrador.setDisabled(false);
				cmbCiudad.setDisabled(false);
				cmbEstCodigo_Estado.setDisabled(false);
				cmbPais.setDisabled(false);
				txtUnrNit.setDisabled(false);
				btnSave.setDisabled(false);
				btnDelete.setDisabled(true);
				btnModify.setDisabled(true);
				btnClear.setDisabled(false);
			} else {
				txtUnrBarrio.setValue(entity.getUnrBarrio());
				txtUnrBarrio.setDisabled(false);
				txtUnrDireccion.setValue(entity.getUnrDireccion());
				txtUnrDireccion.setDisabled(false);
				txtUnrRazonSocial.setValue(entity.getUnrRazonSocial());
				txtUnrRazonSocial.setDisabled(false);
				txtUnrTelefono.setValue(entity.getUnrTelefono());
				txtUnrTelefono.setDisabled(false);
				cmbAdministrador.setValue(entity.getAdministrador()
						.getAdmCod());
				cmbAdministrador.setDisabled(false);
				cmbCiudad.setValue(entity.getCiudad().getCiuCod());
				cmbCiudad.setDisabled(false);
				cmbEstCodigo_Estado.setValue(entity.getEstado().getEstCod());
				cmbEstCodigo_Estado.setDisabled(false);
				cmbPais.setValue(entity.getCiudad().getPais().getPaiCod());
				cmbPais.setDisabled(false);

				txtUnrNit.setValue(entity.getUnrNit());
				txtUnrNit.setDisabled(true);
				btnSave.setDisabled(true);
				btnDelete.setDisabled(false);
				btnModify.setDisabled(false);
				btnClear.setDisabled(false);
			}
		}
	}
//	public void cambioPais(ValueChangeEvent evento) throws Exception
//	{
//		ArrayList<Ciudad> listaDep= new ArrayList<Ciudad>();
//		listCiudad=BusinessDelegatorView.consultarCiudad(Integer.parseInt(evento.getNewValue().toString()));
//		System.out.println(evento.getNewValue().toString());
//		
//		/*for(int i=0; i<listaDepartamentos.size();i++)
//		{
//			listaDepartamentos.add(new SelectItem(listaDep.get(i).getNombre()));
//		}*/
//	}
	
	public void llenarCiudad(ValueChangeEvent evento) throws Exception
	{
		try {
			
			ciudad= BusinessDelegatorView.consultarCiudad(String.valueOf(evento.getNewValue().toString()));
			
			listCiudad = new ArrayList<SelectItem>();
			
			listCiudad.add(new SelectItem(0," -- Seleccione Ciudad -- "));
    		
			for (int i = 0; i < ciudad.size(); i++) {
				//listCiudad.clear();
				SelectItem item = new SelectItem();
				
				item.setValue(ciudad.get(i).getCiuCod());
				item.setLabel(ciudad.get(i).getCiuNombre());
				listCiudad.add(item);
			}
			
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
	public List<Ciudad> getCiudad() {
		return ciudad;
	}

	public void setCiudad(List<Ciudad> ciudad) {
		this.ciudad = ciudad;
	}

	public List<Pais> getPais() {
		return pais;
	}

	public void setPais(List<Pais> pais) {
		this.pais = pais;
	}

	public HtmlSelectOneMenu getCmbPais() {
		try {
			List<Pais> list = BusinessDelegatorView.findByCriteriaInPais(
					null, null, null);
			listPais.clear();
			listPais.add(new SelectItem(0, " -- Seleccione Pais -- "));

			for (Pais pais : list) {
				listPais.add(new SelectItem(pais.getPaiCod(), pais.getPaiNombre()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return cmbPais;
	}

	public void setCmbPais(HtmlSelectOneMenu cmbPais) {
		this.cmbPais = cmbPais;
	}

	
	public HtmlSelectOneMenu getCmbCiudad() {
//		try {
//			List<Ciudad> list = BusinessDelegatorView.findByCriteriaInCiudad(
//					null, null, null);
//			listCiudad.clear();
//			listCiudad.add(new SelectItem(0, " --Seleccione Ciudad-- "));
//
//			for (Ciudad ciudad : list) {
//				listCiudad.add(new SelectItem(ciudad.getCiuCod(), ciudad
//						.getCiuNombre()));
//			}
//		} catch (Exception e) {
//			// TODO: handle exception
//		}
		return cmbCiudad;
	}

	public void setCmbCiudad(HtmlSelectOneMenu cmbCiudad) {
		this.cmbCiudad = cmbCiudad;
	}

	public HtmlSelectOneMenu getCmbEstCodigo_Estado() {
		try {
			List<Estado> list = BusinessDelegatorView.findByCriteriaInEstado(
					null, null, null);
			listEstado.clear();
			listEstado.add(new SelectItem(0, " -- Seleccione el Estado -- "));

			for (Estado estado : list) {
				listEstado.add(new SelectItem(estado.getEstCod(), estado
						.getEstNombre()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return cmbEstCodigo_Estado;
	}

	public void setCmbEstCodigo_Estado(HtmlSelectOneMenu cmbEstCodigoEstado) {
		cmbEstCodigo_Estado = cmbEstCodigoEstado;
	}

	public HtmlSelectOneMenu getCmbAdministrador() {
		try {
			List<Administrador> list = BusinessDelegatorView.findByCriteriaInAdministrador(null, null, null);
			listAdmin.clear();
			listAdmin.add(new SelectItem(0, " -- Seleccione el Administrador -- "));

			for (Administrador admin : list) {
				listAdmin.add(new SelectItem(admin.getAdmCod(), admin.getPersona().getPerPrimerNombre(), admin.getPersona().getPerPrimerApellido()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return cmbAdministrador;
	}

	public void setCmbAdministrador(HtmlSelectOneMenu cmbAdministrador) {
		this.cmbAdministrador = cmbAdministrador;
	}

	public List<SelectItem> getListEstado() {
		return listEstado;
	}

	public void setListEstado(List<SelectItem> listEstado) {
		this.listEstado = listEstado;
	}

//	public List<SelectItem> getListCiudad() {
//		return listCiudad;
//	}
//
//	public void setListCiudad(ArrayList<SelectItem> listCiudad) {
//		this.listCiudad = listCiudad;
//	}

//	public void setListCiudad(List<SelectItem> listCiudad) {
//		this.listCiudad = listCiudad;
//	}

	public List<SelectItem> getListCiudad() {
		return listCiudad;
	}

	public void setListCiudad(List<SelectItem> listCiudad) {
		this.listCiudad = listCiudad;
	}

	public List<SelectItem> getListPais() {
		return listPais;
	}

//	public ArrayList<Ciudad> getListCiudad() {
//		return listCiudad;
//	}
//
//	public void setListCiudad(ArrayList<Ciudad> listCiudad) {
//		this.listCiudad = listCiudad;
//	}

	public void setListPais(List<SelectItem> listPais) {
		this.listPais = listPais;
	}

	public List<SelectItem> getListAdmin() {
		return listAdmin;
	}

	public void setListAdmin(List<SelectItem> listAdmin) {
		this.listAdmin = listAdmin;
	}

	public String action_save() {
		try {

			String nit = txtUnrNit.getValue().toString();
			String barrio = txtUnrBarrio.getValue().toString().toUpperCase();
			String direccion = txtUnrDireccion.getValue().toString();
			String telefono = txtUnrTelefono.getValue().toString();
			String ciudad = cmbCiudad.getValue().toString();
			String estado = "ACTIVO";
			String nombre = txtUnrRazonSocial.getValue().toString().toUpperCase();
			String admCodigo = cmbAdministrador.getValue().toString();

			if(!Utilities.soloNumeros(nit)){
				throw new Exception("El NIT debe ser solo numerico");
			}
			if(nit.trim().equals("")){
				throw new Exception("El Nit debe ser obligatorio");
			}
			if(!Utilities.soloNumerosyLetras(barrio)){
				throw new Exception("El barrio no debe contener caracteres especiales");
			}
			if(barrio.trim().equals("")){
				throw new Exception("El barrio debe ser obligatorio");
			}
//			if(!Utilities.soloNumerosyLetras(direccion)){
//				throw new Exception("La direccion no contiene el caracter #");
//			}
			if (direccion.trim().equals("")) {
				throw new Exception("La direccion debe ser obligatoria");
			}
			if (!Utilities.soloNumeros(telefono)) {
				throw new Exception("El telefono deber numerico");
			}
			if (telefono.trim().equals("")) {
				throw new Exception("EL telefono debe ser obligatorio");
			}
			if(ciudad.trim().equals("")){
				throw new Exception("Debe elegir una ciudad");
			}
//			if(estado.trim().equals("")){
//				throw new Exception("Debe elegir un estado");
//			}
			if (!Utilities.soloNumerosyLetras(nombre)) {
				throw new Exception("La Razon Social no debe contener caracteres especiales ");
			}
			if (nombre.trim().equals("")) {
				throw new Exception(nombre + "debe ser obligatorio");
			}
			
			if (admCodigo.trim().equals("")) {
				throw new Exception("Debe elegir un administrador");
			}
			BusinessDelegatorView.saveUnidadResidencial(barrio, direccion, nit, nombre, telefono, admCodigo, ciudad, estado);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
			action_clear();

		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_delete() {
		try {
			BusinessDelegatorView.deleteUnidadResidencial(FacesUtils.checkString(
					txtUnrNit));
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}
	public String action_inactivar() {
		try {

			String nit = txtUnrNit.getValue().toString();
			String barrio = txtUnrBarrio.getValue().toString().toUpperCase();
			String direccion = txtUnrDireccion.getValue().toString();
			String telefono = txtUnrTelefono.getValue().toString();
			String ciudad = cmbCiudad.getValue().toString();
			String estado = "INACTIVO";
			String nombre = txtUnrRazonSocial.getValue().toString().toUpperCase();
			String admCodigo = cmbAdministrador.getValue().toString();

			if(!Utilities.soloNumeros(nit)){
				throw new Exception("El NIT debe ser solo numerico");
			}
			if(nit.trim().equals("")){
				throw new Exception("El Nit debe ser obligatorio");
			}
			if(!Utilities.soloNumerosyLetras(barrio)){
				throw new Exception("El barrio no debe contener caracteres especiales");
			}
			if(barrio.trim().equals("")){
				throw new Exception("El barrio debe ser obligatorio");
			}
//			if(!Utilities.soloNumerosyLetras(direccion)){
//				throw new Exception("La direccion no contiene el caracter #");
//			}
			if (direccion.trim().equals("")) {
				throw new Exception("La direccion debe ser obligatoria");
			}
			if (!Utilities.soloNumeros(telefono)) {
				throw new Exception("El telefono deber numerico");
			}
			if (telefono.trim().equals("")) {
				throw new Exception("EL telefono debe ser obligatorio");
			}
			if(ciudad.trim().equals("")){
				throw new Exception("Debe elegir una ciudad");
			}
//			if(estado.trim().equals("")){
//				throw new Exception("Debe elegir un estado");
//			}
			if (!Utilities.soloNumerosyLetras(nombre)) {
				throw new Exception("La Razon Social no debe contener caracteres especiales ");
			}
			if (nombre.trim().equals("")) {
				throw new Exception(nombre + "debe ser obligatorio");
			}
			
			if (admCodigo.trim().equals("")) {
				throw new Exception("Debe elegir un administrador");
			}
			BusinessDelegatorView.updateUnidadResidencial(barrio, direccion, nit, nombre, telefono, admCodigo, ciudad, estado);

			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}
	public String action_modify() {
		try {
			String nit = txtUnrNit.getValue().toString();
			String barrio = txtUnrBarrio.getValue().toString().toUpperCase();
			String direccion = txtUnrDireccion.getValue().toString();
			String telefono = txtUnrTelefono.getValue().toString();
			String ciudad = cmbCiudad.getValue().toString();
			String estado = cmbEstCodigo_Estado.getValue().toString();
			String nombre = txtUnrRazonSocial.getValue().toString().toUpperCase();
			String admCodigo = cmbAdministrador.getValue().toString();

			if(!Utilities.soloNumeros(nit)){
				throw new Exception("El NIT debe ser solo numerico");
			}
			if(nit.trim().equals("")){
				throw new Exception("El Nit debe ser obligatorio");
			}
			if(!Utilities.soloNumerosyLetras(barrio)){
				throw new Exception("El barrio no debe contener caracteres especiales");
			}
			if(barrio.trim().equals("")){
				throw new Exception("El barrio debe ser obligatorio");
			}
//			if(!Utilities.soloNumerosyLetras(direccion)){
//				throw new Exception("La direccion no contiene el caracter #");
//			}
			if (direccion.trim().equals("")) {
				throw new Exception("La direccion debe ser obligatoria");
			}
			if (!Utilities.soloNumeros(telefono)) {
				throw new Exception("El telefono deber numerico");
			}
			if (telefono.trim().equals("")) {
				throw new Exception("EL telefono debe ser obligatorio");
			}
			if(ciudad.trim().equals("")){
				throw new Exception("Debe elegir una ciudad");
			}
			if(estado.trim().equals("")){
				throw new Exception("Debe elegir un estado");
			}
			if (!Utilities.soloNumerosyLetras(nombre)) {
				throw new Exception("La Razon Social no debe contener caracteres especiales ");
			}
			if (nombre.trim().equals("")) {
				throw new Exception(nombre + "debe ser obligatorio");
			}
			
			if (admCodigo.trim().equals("")) {
				throw new Exception("Debe elegir un administrador");
			}
			BusinessDelegatorView.updateUnidadResidencial(barrio, direccion, nit, nombre, telefono, admCodigo, ciudad, estado);

			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
			action_clear();
			
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modifyWitDTO(String unrBarrio, String unrDireccion,
			String unrNit, String unrRazonSocial, String unrTelefono,
			String admCod_Administrador, String ciuCod_Ciudad, String estCod_Estado)
	throws Exception {
		try {
			BusinessDelegatorView.updateUnidadResidencial(unrBarrio,
					unrDireccion, unrNit, unrRazonSocial, unrTelefono,
					admCod_Administrador, ciuCod_Ciudad, estCod_Estado);
			renderManager.getOnDemandRenderer("UnidadResidencialView")
			.requestRender();
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			//renderManager.getOnDemandRenderer("UnidadResidencialView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}

		return "";
	}

	public List<UnidadResidencial> getUnidadResidencial() {
		if (flag) {
			try {
				unidadResidencial = BusinessDelegatorView.getUnidadResidencial();
				flag = false;
			} catch (Exception e) {
				flag = true;
				FacesUtils.addErrorMessage(e.getMessage());
			}
		}

		return unidadResidencial;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setUnidadResidencial(List<UnidadResidencial> unidadResidencial) {
		this.unidadResidencial = unidadResidencial;
	}

	public boolean isRenderDataTable() {
		try {
			if (flag) {
				if (BusinessDelegatorView.findTotalNumberUnidadResidencial() > 0) {
					renderDataTable = true;
				} else {
					renderDataTable = false;
				}
			}

			flag = false;
		} catch (Exception e) {
			renderDataTable = false;
			e.printStackTrace();
		}

		return renderDataTable;
	}

	public DataModel getData() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModel(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and
	 * returned as a list of objects for display in the UI.
	 */
	 private DataPage<UnidadResidencial> getDataPage(int startRow, int pageSize) {
		 // Retrieve the total number of objects from the database.  This
		 // number is required by the DataPage object so the paginator will know
		 // the relative location of the page data.
		 int totalNumberUnidadResidencial = 0;

		 try {
			 totalNumberUnidadResidencial = BusinessDelegatorView.findTotalNumberUnidadResidencial()
			 .intValue();
		 } catch (Exception e) {
			 FacesUtils.addErrorMessage(e.getMessage());
		 }

		 // Calculate indices to be displayed in the ui.
		 int endIndex = startRow + pageSize;

		 if (endIndex > totalNumberUnidadResidencial) {
			 endIndex = totalNumberUnidadResidencial;
		 }

		 try {
			 unidadResidencial = BusinessDelegatorView.findPageUnidadResidencial(sortColumnName,
					 sortAscending, startRow, endIndex - startRow);

			 // Remove this Renderable from the existing render groups.
			 //leaveRenderGroups();        			
		 } catch (Exception e) {
			 FacesUtils.addErrorMessage(e.getMessage());
		 }

		 // Add this Renderable to the new render groups.
		 //joinRenderGroups();
		 // Reset the dirtyData flag.
		 onePageDataModel.setDirtyData(false);
		 // This is required when using Hibernate.  If the SessionManager is not
		 // cleared or closed objects are cached and stale objects will show up
		 // in the table.
		 // This way, the detached objects are reread from the database.
		 // This call is not required with Hibernate, which uses a Query Hint
		 // to clear the l2 cache in the DAO.
		 flag = true;

		 return new DataPage<UnidadResidencial>(totalNumberUnidadResidencial,
				 startRow, unidadResidencial);
	 }

	 public DataModel getDataDTO() {
		 state = PersistentFacesState.getInstance();

		 if (onePageDataModel == null) {
			 onePageDataModel = new LocalDataModelDTO(pageSize);
		 }

		 return onePageDataModel;
	 }

	 /**
	  * This is where the Object data is retrieved from the database and
	  * returned as a list of objects for display in the UI.
	  */
	 private DataPage<UnidadResidencialDTO> getDataPageDTO(int startRow,
			 int pageSize) {
		 // Retrieve the total number of objects from the database.  This
		 // number is required by the DataPage object so the paginator will know
		 // the relative location of the page data.
		 int totalNumberUnidadResidencial = 0;

		 try {
			 totalNumberUnidadResidencial = BusinessDelegatorView.findTotalNumberUnidadResidencial()
			 .intValue();
		 } catch (Exception e) {
			 FacesUtils.addErrorMessage(e.getMessage());
		 }

		 // Calculate indices to be displayed in the ui.
		 int endIndex = startRow + pageSize;

		 if (endIndex > totalNumberUnidadResidencial) {
			 endIndex = totalNumberUnidadResidencial;
		 }

		 try {
			 unidadResidencial = BusinessDelegatorView.findPageUnidadResidencial(sortColumnName,
					 sortAscending, startRow, endIndex - startRow);

			 if (Utilities.validationsList(unidadResidencial)) {
				 unidadResidencialDTO = new ArrayList<UnidadResidencialDTO>();

				 for (UnidadResidencial unidadResidencialTmp : unidadResidencial) {
					 UnidadResidencialDTO unidadResidencialDTO2 = new UnidadResidencialDTO();
					 unidadResidencialDTO2.setUnrNit(unidadResidencialTmp.getUnrNit()
							 .toString());
					 unidadResidencialDTO2.setUnrBarrio((unidadResidencialTmp.getUnrBarrio() != null)
							 ? unidadResidencialTmp.getUnrBarrio().toString() : null);
					 unidadResidencialDTO2.setUnrDireccion((unidadResidencialTmp.getUnrDireccion() != null)
							 ? unidadResidencialTmp.getUnrDireccion().toString() : null);
					 unidadResidencialDTO2.setUnrRazonSocial((unidadResidencialTmp.getUnrRazonSocial() != null)
							 ? unidadResidencialTmp.getUnrRazonSocial().toString()
									 : null);
					 unidadResidencialDTO2.setUnrTelefono((unidadResidencialTmp.getUnrTelefono() != null)
							 ? unidadResidencialTmp.getUnrTelefono().toString() : null);
					 unidadResidencialDTO2.setAdmCod_Administrador((unidadResidencialTmp.getAdministrador()
							 .getAdmCod() != null)
							 ? unidadResidencialTmp.getAdministrador().getAdmCod()
									 .toString() : null);
					 unidadResidencialDTO2.setCiuCod_Ciudad((unidadResidencialTmp.getCiudad()
							 .getCiuCod() != null)
							 ? unidadResidencialTmp.getCiudad().getCiuCod().toString()
									 : null);
					 unidadResidencialDTO2.setEstCod_Estado((unidadResidencialTmp.getEstado()
							 .getEstCod() != null)
							 ? unidadResidencialTmp.getEstado().getEstCod().toString()
									 : null);
					 unidadResidencialDTO2.setUnidadResidencial(unidadResidencialTmp);
					 unidadResidencialDTO2.setUnidadResidencialView(this);
					 unidadResidencialDTO.add(unidadResidencialDTO2);
				 }
			 }

			 // Remove this Renderable from the existing render groups.
			 leaveRenderGroups();
		 } catch (Exception e) {
			 FacesUtils.addErrorMessage(e.getMessage());
		 }

		 // Add this Renderable to the new render groups.
		 joinRenderGroups();
		 // Reset the dirtyData flag.
		 onePageDataModel.setDirtyData(false);
		 // This is required when using Hibernate.  If the SessionManager is not
		 // cleared or closed objects are cached and stale objects will show up
		 // in the table.
		 // This way, the detached objects are reread from the database.
		 // This call is not required with Hibernate, which uses a Query Hint
		 // to clear the l2 cache in the DAO.
		 flag = true;

		 return new DataPage<UnidadResidencialDTO>(totalNumberUnidadResidencial,
				 startRow, unidadResidencialDTO);
	 }

	 protected boolean isDefaultAscending(String sortColumn) {
		 return true;
	 }

	 /**
	  * This method is called when a render call is made from the server. Render
	  * calls are only made to views containing an updated record. The data is
	  * marked as dirty to trigger a fetch of the updated record from the
	  * database before rendering takes place.
	  */
	 public PersistentFacesState getState() {
		 onePageDataModel.setDirtyData();

		 return state;
	 }

	 /**
	  * This method is called from faces-config.xml with each new session.
	  */
	 public void setRenderManager(RenderManager renderManager) {
		 this.renderManager = renderManager;
	 }

	 public void renderingException(RenderingException arg0) {
		 if (arg0 instanceof TransientRenderingException) {
		 } else if (arg0 instanceof FatalRenderingException) {
			 // Remove from existing Customer render groups.
			 leaveRenderGroups();
		 }
	 }

	 /**
	  * Remove this Renderable from existing uiCustomerBeans render groups.
	  * OnDemandRenderers are named/created using the underlying Customer Number.
	  */
	 private void leaveRenderGroups() {
		 if (Utilities.validationsList(unidadResidencialDTO)) {
			 for (UnidadResidencialDTO unidadResidencialTmp : unidadResidencialDTO) {
				 renderManager.getOnDemandRenderer("UnidadResidencialView")
				 .remove(this);
			 }
		 }
	 }

	 /**
	  * Add this Renderable to the new uiCustomerBeans render groups.
	  * OnDemandRenderers are named/created using the underlying Customer Number.
	  */
	 private void joinRenderGroups() {
		 if (Utilities.validationsList(unidadResidencialDTO)) {
			 for (UnidadResidencialDTO unidadResidencialTmp : unidadResidencialDTO) {
				 renderManager.getOnDemandRenderer("UnidadResidencialView")
				 .add(this);
			 }
		 }
	 }

	 public void dispose() throws Exception {
	 }

	 public RenderManager getRenderManager() {
		 return renderManager;
	 }

	 public void setState(PersistentFacesState state) {
		 this.state = state;
	 }

	 public HtmlInputText getTxtUnrBarrio() {
		 return txtUnrBarrio;
	 }

	 public void setTxtUnrBarrio(HtmlInputText txtUnrBarrio) {
		 this.txtUnrBarrio = txtUnrBarrio;
	 }

	 public HtmlInputText getTxtUnrDireccion() {
		 return txtUnrDireccion;
	 }

	 public void setTxtUnrDireccion(HtmlInputText txtUnrDireccion) {
		 this.txtUnrDireccion = txtUnrDireccion;
	 }

	 public HtmlInputText getTxtUnrRazonSocial() {
		 return txtUnrRazonSocial;
	 }

	 public void setTxtUnrRazonSocial(HtmlInputText txtUnrRazonSocial) {
		 this.txtUnrRazonSocial = txtUnrRazonSocial;
	 }

	 public HtmlInputText getTxtUnrTelefono() {
		 return txtUnrTelefono;
	 }

	 public void setTxtUnrTelefono(HtmlInputText txtUnrTelefono) {
		 this.txtUnrTelefono = txtUnrTelefono;
	 }

	 public HtmlInputText getTxtUnrNit() {
		 return txtUnrNit;
	 }

	 public void setTxtUnrNit(HtmlInputText txtUnrNit) {
		 this.txtUnrNit = txtUnrNit;
	 }

	 public HtmlCommandButton getBtnSave() {
		 return btnSave;
	 }

	 public void setBtnSave(HtmlCommandButton btnSave) {
		 this.btnSave = btnSave;
	 }

	 public HtmlCommandButton getBtnModify() {
		 return btnModify;
	 }

	 public void setBtnModify(HtmlCommandButton btnModify) {
		 this.btnModify = btnModify;
	 }

	 public HtmlCommandButton getBtnDelete() {
		 return btnDelete;
	 }

	 public void setBtnDelete(HtmlCommandButton btnDelete) {
		 this.btnDelete = btnDelete;
	 }

	 public HtmlCommandButton getBtnClear() {
		 return btnClear;
	 }

	 public void setBtnClear(HtmlCommandButton btnClear) {
		 this.btnClear = btnClear;
	 }

	 public void setRenderDataTable(boolean renderDataTable) {
		 this.renderDataTable = renderDataTable;
	 }

	 public void setFlag(boolean flag) {
		 this.flag = flag;
	 }

	 public List<UnidadResidencialDTO> getUnidadResidencialDTO() {
		 return unidadResidencialDTO;
	 }

	 public void setUnidadResidencialDTO(
			 List<UnidadResidencialDTO> unidadResidencialDTO) {
		 this.unidadResidencialDTO = unidadResidencialDTO;
	 }

	 public TimeZone getTimeZone() {
		 return java.util.TimeZone.getDefault();
	 }

	 /**
	  * A special type of JSF DataModel to allow a datatable and datapaginator
	  * to page through a large set of data without having to hold the entire
	  * set of data in memory at once.
	  * Any time a managed bean wants to avoid holding an entire dataset,
	  * the managed bean declares this inner class which extends PagedListDataModel
	  * and implements the fetchData method. fetchData is called
	  * as needed when the table requires data that isn't available in the
	  * current data page held by this object.
	  * This requires the managed bean (and in general the business
	  * method that the managed bean uses) to provide the data wrapped in
	  * a DataPage object that provides info on the full size of the dataset.
	  */
	 private class LocalDataModel extends PagedListDataModel {
		 public LocalDataModel(int pageSize) {
			 super(pageSize);
		 }

		 public DataPage<UnidadResidencial> fetchPage(int startRow, int pageSize) {
			 // call enclosing managed bean method to fetch the data
			 return getDataPage(startRow, pageSize);
		 }
	 }

	 private class LocalDataModelDTO extends PagedListDataModel {
		 public LocalDataModelDTO(int pageSize) {
			 super(pageSize);
		 }

		 public DataPage<UnidadResidencialDTO> fetchPage(int startRow,
				 int pageSize) {
			 // call enclosing managed bean method to fetch the data
			 return getDataPageDTO(startRow, pageSize);
		 }
	 }
}
